x86/emul: Fix sarx emulation test
authorAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 24 Feb 2017 18:12:19 +0000 (18:12 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 27 Feb 2017 10:07:54 +0000 (10:07 +0000)
The emulation tests run `sarx %edx,(%ecx),%ebx` with 0xfedcba98 pointed at by
%ecx, and 0xff13 in %rdx.

As the instruction uses a 32bit operand size, the expected result is
0x00000000ffffffdb in %rbx (rather than 0xffffffffffffffdb), due to usual
behaviour of 32bit operations on 64bit registers.

The test harness was incorrectly sign extending from 32 bits to 64 bits rather
than zero extending when checking the result of emulation, causing a false
negative failure.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
tools/tests/x86_emulator/test_x86_emulator.c

index 71e3b969c2aa81560e848500a17465571dbc2e8c..37d00f1f4433cfc349539c6312effbf1d5d496f3 100644 (file)
@@ -1155,7 +1155,7 @@ int main(int argc, char **argv)
         regs.eflags = 0xa43;
         rc = x86_emulate(&ctxt, &emulops);
         if ( (rc != X86EMUL_OKAY) ||
-             regs.ebx != ((signed)*res >> (regs.edx & 0x1f)) ||
+             regs.ebx != (unsigned)(((signed)*res >> (regs.edx & 0x1f))) ||
              regs.edx != 0xff13 || *res != 0xfedcba98 ||
              regs.eflags != 0xa43 || !check_eip(sarx) )
             goto fail;